package com.foton.lotterydomain.activity.repository;

import com.foton.lotterycommon.common.Constants;
import com.foton.lotterydomain.activity.model.req.PartakeReq;
import com.foton.lotterydomain.activity.model.vo.*;

import java.util.List;

/**
 * @Author RenPu
 * @Date 2023/11/30 18:09
 * @Version 1.0
 * @Description: 活动仓储服务
 **/
public interface IActivityRepository {

    /**
     * 添加活动配置
     *
     * @param activity 活动配置
     */
    void addActivity(ActivityVO activity);

    /**
     * 添加奖品配置集合
     *
     * @param awardList 奖品配置集合
     */
    void addAward(List<AwardVO> awardList);

    /**
     * 添加策略配置
     *
     * @param strategy 策略配置
     */
    void addStrategy(StrategyVO strategy);

    /**
     * 添加策略明细配置
     *
     * @param strategyDetailList 策略明细集合
     */
    void addStrategyDetailList(List<StrategyDetailVO> strategyDetailList);

    /**
     * 变更活动状态
     *
     * @param activityId  活动ID
     * @param beforeState 修改前状态
     * @param afterState  修改后状态
     * @return 更新结果
     */
    boolean alterStatus(Long activityId, Enum<Constants.ActivityState> beforeState, Enum<Constants.ActivityState> afterState);


    /**
     * 查询用户活动账单明细数据
     * @param req
     * @return
     */
    ActivityBillVO queryActivityBill(PartakeReq req);

    /**
     * 根据活动ID进行扣减库存值
     * @param req
     * @return
     */
    int subtractionActivityStock(PartakeReq req);
}
